package com.baizhi.config;

import com.baizhi.realm.AuthenRealm;
import com.baizhi.realm.AuthorRealm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;
//shiro 配置类
@Configuration
public class ShiroConfig {
//    日志文件对象
    Logger logger = LoggerFactory.getLogger(ShiroConfig.class);
//    创建过滤器工厂
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(
            DefaultWebSecurityManager securityManager){
//        以日志格式输出语句
        logger.debug("拦截器被创建了");
        ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
        Map map = new HashMap();
//        设置拦截器的拦截规则
//        anon 匿名可访问    不需要认证就可以访问(登录)
//        authc 认证可访问   需要认证(登录)通过才可以访问
            map.put("/admin/*","anon");
            map.put("/login.jsp","anon");
            map.put("/Admin.jsp","authc");
            map.put("/First.jsp","authc");
//         将配置的拦截规则传给拦截器
        factoryBean.setFilterChainDefinitionMap(map);
//      设置安全管理器
        factoryBean.setSecurityManager(securityManager);
        return factoryBean;
    }
//    创建安全管理器    使用自定义的realm
//  @Bean标签 加在方法上
//  方法的形参如果工厂有对应的类型 会自动装配
    @Bean
    public DefaultWebSecurityManager securityManager(AuthorRealm authorRealm){
//        创建安全管理器对象
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//        设置使用自定义的realm
        securityManager.setRealm(authorRealm);
        return securityManager;
    }
//    创建自定义的realm
    @Bean
    public AuthorRealm authorRealm(){
        return new AuthorRealm();
    }

}
